import java.util.HashMap;
import java.util.Map;

/**
 * Created with IntelliJ IDEA.
 * Description:水果成篮
 * User: bjc
 * Date: 2025-11-11
 * Time: 20:08
 */
public class Test05_totalFruit {
    public int totalFruit(int[] fruits) {
        //创建哈希数组
        int[] hash = new int[fruits.length];
        int ret = 0;
        int left = 0,right = 0;
        int kind = 0;//记录水果的种类
        while (right < fruits.length){
            //进窗口
            int in = fruits[right];
            if(hash[in] == 0) {//说明是新的种类水果
                kind++;//更新种类数
            }
            hash[in]++;//记录该种类的水果数量
            while(kind > 2){//水果种类数大于2，需要出窗口
                //出窗口
                int out = fruits[left];
                left++;
                hash[out]--;//更新该种类的水果数量
                if(hash[out] == 0){//该种类的水果数量为0，说明该种类水果已经不存在了，删除该种类水果
                    kind--;
                }

            }
            //更新结果
            ret = Math.max(ret,right-left+1);
            right++;
        }
        return ret;
    }
    //使用map
    public int totalFruit1(int[] f)
    {
        Map<Integer, Integer> hash = new HashMap<Integer, Integer>(); // 统计窗口内水果的种类
        int ret = 0;
        for(int left = 0, right = 0; right < f.length; right++)
        {
            int in = f[right];
            hash.put(in, hash.getOrDefault(in, 0) + 1); // 进窗口
            while(hash.size() > 2)
            {
                int out = f[left];
                hash.put(out, hash.get(out) - 1); // 出窗口
                if(hash.get(out) == 0)
                    hash.remove(out);
                left++;
            }
            // 更新结果
            ret = Math.max(ret, right - left + 1);
        }
        return ret;
    }
}
